The invention relates generally to input/output data processing in computer systems and particularly to reducing the number of interrupts required for the processing of such I/O data.
Today""s networks transmit data at rates equal to multi-gigabytes per second and these rates continue to increase as user demands for ever faster transmission increase. Computing systems usually include input/output drivers that receive data packets from incoming lines, store the packets, and interrupt a host processor to alert the host of the presence of data for the host to process. Traditionally, an I/O device interrupts a host each time a complete packet of data is received and stored. As data transmission rates rise, this traditional technique of interrupting for each received packet consumes more and more of a host""s processing resources, to the point that the traditional technique is unacceptable. Consequently, there have been attempts to reduce the interrupt rate to more efficiently utilize a host processor""s resources. For example, one improved technique is disclosed in U.S. Pat. No. 5,659,758, which issued to Gentry et al on Aug. 19, 1997 Gentry teaches a technique that reduces the number of interrupts, while guaranteeing that a host will eventually be interrupted, based on elapsed time or the number of packets received. In Gentry, the I/O device is initially placed in a state such that the first received packet generates an interrupt. Thereafter, an interrupt will be generated each time N packets are received or for the next packet received after the expiration of a fixed time interval T. Thus, after receipt of an initial packet, if a burst of packets are received in short order, an interrupt is generated after each N of these packets. On the other hand, if less than N packets are received when the time interval T expires, then the next packet received thereafter will cause an interrupt. Gentry also mentions that the parameters N and T may be changed by the host. However, Gentry does not teach any algorithm that the host might use for changing these parameters.
While meritorious, Gentry still suffers from certain deficiencies. For example, it is possible for less than N packets to arrive before the expiration of T. In this event, the number of received packets is insufficient to trigger the interrupt based on N. When T expires, the I/O driver is primed to interrupt on the next received packet. However, if there is a long delay in receipt of the next packet, the interrupt is delayed and the resulting latency in processing of the already received packets may be intolerable. More important, however, is the fact that Gentry still generates a significant number of interrupts, which as transmission rates continue to increase can still present a performance problem. Further improvements are needed.
The invention improves the known methods of generating interrupts for the servicing of packets. The method is based on dynamic communication between an I/O adapter and a host I/O driver for which the data is destined. The invention has the capability to receive data and pass the data to the host for long periods of time with only a single initial interrupt of the host. If the host begins to fall behind in its processing of received data, the invention has the capability to monitor the situation and to initiate additional interrupts to the host. If additional interrupts are needed because the host is falling behind, the invention can initiate additional processes for the processing of the data to relieve the host situation,
In the preferred embodiment, an arriving block of data is stored in a next element of an ordered array of storage elements by a data receiving process. That element is then marked as filled. If an I/O process for processing the elements is already executing, in general, no I/O interrupt is generated. The I/O process is designed to continue executing as long as there elements marked as filled to process. If an I/O process is not executing, an interrupt is generated to initiate the I/O process. Thereafter, the processing of elements by the I/O process is monitored by the data receiving process. If the I/O process falls behind the data receiving process by a specified threshold, another interrupt is generated by the data receiving process. When the I/O process begins to process a given element, that element is marked as not filled.
In the preferred embodiment, monitoring of the I/O process begins after the data receiving process fills an element and then determines that processing of an earlier filled element in the array has not begun. This earlier element is the element immediately preceding the element just filled in the preferred embodiment. During monitoring, the number of previously filled elements that are still marked as filled are counted and if this count exceeds a specified threshold, an additional interrupt is generated. Monitoring also includes measuring the time interval between the filling of an element with arriving data and the initiation of processing of that element by the input/output process. Another interrupt is generated if this time interval exceeds a specified time threshold.